// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "gpu/config/gpu_util.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace gpu {

TEST(GpuUtilTest, MergeFeatureSets)
{
    {
        // Merge two empty sets.
        std::set<int> src;
        std::set<int> dst;
        EXPECT_TRUE(dst.empty());
        MergeFeatureSets(&dst, src);
        EXPECT_TRUE(dst.empty());
    }
    {
        // Merge an empty set into a set with elements.
        std::set<int> src;
        std::set<int> dst;
        dst.insert(1);
        EXPECT_EQ(1u, dst.size());
        MergeFeatureSets(&dst, src);
        EXPECT_EQ(1u, dst.size());
    }
    {
        // Merge two sets where the source elements are already in the target set.
        std::set<int> src;
        std::set<int> dst;
        src.insert(1);
        dst.insert(1);
        EXPECT_EQ(1u, dst.size());
        MergeFeatureSets(&dst, src);
        EXPECT_EQ(1u, dst.size());
    }
    {
        // Merge two sets with different elements.
        std::set<int> src;
        std::set<int> dst;
        src.insert(1);
        dst.insert(2);
        EXPECT_EQ(1u, dst.size());
        MergeFeatureSets(&dst, src);
        EXPECT_EQ(2u, dst.size());
    }
}

TEST(GpuUtilTest, StringToFeatureSet)
{
    {
        // zero feature.
        std::set<int> features;
        StringToFeatureSet("", &features);
        EXPECT_EQ(0u, features.size());
    }
    {
        // One features.
        std::set<int> features;
        StringToFeatureSet("4", &features);
        EXPECT_EQ(1u, features.size());
    }
    {
        // Multiple features.
        std::set<int> features;
        StringToFeatureSet("1,9", &features);
        EXPECT_EQ(2u, features.size());
    }
}

} // namespace gpu
